package com.itheima.health.controller;

import com.itheima.health.common.MessageConst;
import com.itheima.health.common.RedisConst;
import com.itheima.health.entity.Result;
import com.itheima.health.util.ValidateCodeUtils;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

/**
 * 验证码Controller
 */
@RestController
@RequestMapping("/mobile/validateCode")
@Slf4j
@Api(tags = "手机端验证码接口")
public class MobileValidateCodeController {
    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 发送验证码
     *
     * @param type      验证码类型，用于区分不同的业务
     * @param telephone 手机号
     * @return
     */
    @RequestMapping("/send")
    public Result send(String type, String telephone) {
        log.info("[验证码-发送]type:{},telephone:{}", type, telephone);
        // type用于区分业务 不同 type存的方式不同
        //生成验证码
        //生成随机的四位验证码
        Integer code = ValidateCodeUtils.generateValidateCode(4);
        log.info("我们要发送给用户的验证码是:"+code);

        // 我们要把手机号 和验证码 存储到 redis中  键 字符串  值 字符串
        String key = RedisConst.VALIDATE_CODE_PREFIX +"_"+type+"_"+telephone;
                   //  validateCode_MOBILE_SIGNIN_telephone
                  //   验证标识       手机登录        手机号
        //这种key的写法是遵循一种开发默认规则 不同公司规则不同  主要用于区分 不同的键 作用不同

        redisTemplate.opsForValue().set(key,code,2, TimeUnit.MINUTES);
                                   // 手机号:code   存储时间 2 单位 分钟

        return new Result(true, MessageConst.SEND_VALIDATECODE_SUCCESS);
    }

}
